package main.chapter3.innerclass

class OuterClass {
    // 当内部类的实例与外部类实例有关时非静态内部类
    // 当内部类的实例与外部类的实例仅仅逻辑有关，则使用静态内部类
    val a = 0

    //kotlin默认是静态内部类
    class StaticInnerClass {
        fun hello() {
            //静态内部类不持有外部类的引用，无法访问外部类的a
//            println(a)
        }
    }

    //inner非静态内部类
    inner class InnerClass {
        val a = 6;
        fun hello() {
            //访问外部类的a
            println(this@OuterClass.a)
            //内部类的a
            println(this.a)
        }
    }
}

interface OnClickListener {
    fun onClick()
}

class View {
    var onClickListener: OnClickListener? = null
}

fun main(args: Array<String>) {
    //kotlin默认是静态内部类
    val staticInner = OuterClass.StaticInnerClass()

    //非静态内部类的实例化
    val inner = OuterClass().InnerClass()

    val view = View()
    //匿名内部类
    view.onClickListener = object : OnClickListener {
        override fun onClick() {
            println("点击了")
        }
    }
}